package model.entities;

import java.util.Collection;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import model.dtos.CartaDTO;
import model.persistence.HibernateSessionFactory;
import model.persistence.daos.LocalDAO;

import org.hibernate.Session;

@Entity
@Table(name = "Cartas")
public class Carta
{
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	
	@OneToMany
	@JoinColumn(name = "id")
	private Collection<ItemCarta> items;

	@Column(name = "nombre", nullable = false, length = 50)
	private String nombre;

	@Column(name = "fechaDesde", nullable = false)
	private Date fechaDesde;

	@Column(name = "fechaHasta", nullable = false)
	private Date fechaHasta;
	
	@OneToOne
	@JoinColumn(name = "idLocal")
	private Local local;

	public boolean estaVigente(Date fecha)
	{
		return fecha.after(fechaDesde) && fecha.before(fechaHasta);
	}

	public static void Save(Carta carta)
	{
		Session session = HibernateSessionFactory.getSessionFactory().openSession();
		session.save(carta);
		session.flush();
		session.close();
	}

	public Collection<ItemCarta> getItems()
	{
		return items;
	}

	public void setItems(Collection<ItemCarta> items)
	{
		this.items = items;
	}

	public Date getFechaDesde()
	{
		return fechaDesde;
	}

	public void setFechaDesde(Date fechaDesde)
	{
		this.fechaDesde = fechaDesde;
	}

	public Date getFechaHasta()
	{
		return fechaHasta;
	}

	public void setFechaHasta(Date fechaHasta)
	{
		this.fechaHasta = fechaHasta;
	}

	public String getNombre()
	{
		return nombre;
	}

	public void setNombre(String nombre)
	{
		this.nombre = nombre;
	}

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}

	public static Collection<Carta> getCartas(Collection<Integer> cartas)
	{
		// TODO Auto-generated method stub
		return null;
	}

	public void setLocal(Local local) {
		this.local = local;
	}

	public Local getLocal() {
		return local;
	}
	
	public static Carta crearInstancia(CartaDTO _carta)
	{
		Carta carta= new Carta();
		carta.setFechaDesde(_carta.getFechaDesde());
		carta.setFechaHasta(_carta.getFechaHasta());
		carta.setId(_carta.getId());
		carta.setNombre(_carta.getNombre());
		carta.setLocal((Local) LocalDAO.getById(_carta.getIdLocal()));
		
		//TODO
		carta.setItems(null);
		
		return carta;
	}
}
